/**
 * 实用化工具类
 * Created by 杨浩宇 on 2015-12-11.
 */
define(["jquery"], function ($) {
    function Utils() {

    }

    Utils.prototype = {
        /**
         * 字符串是否为空。
         * null、undefined、""都会返回true
         * @param str
         * @returns {*|boolean}
         */
        isBlank: function (str) {
            return this.isNone(str) || (str === "");
        },

        /**
         * 对象是否为空
         * null、undefined返回true
         * @param obj
         * @returns {boolean}
         */
        isNone: function (obj) {
            return (obj === null) || (obj === undefined) || (obj === "undefined");
        },

        formToJSON: function ($form) {
            var elements = $form.serializeArray();
            if (!this.isNone(elements) && elements.length > 0) {
                var json = {};
                $.each(elements, function (index, item) {
                    json[item.name] = item.value;
                });
                return json;
            } else {
                return {};
            }
        },

        /**
         * 处理查询参数
         * 此方法开放给其它用户调用
         * @param param 参数对象
         * @returns {string}
         */
        parseParam: function (param) {
            return this._parseParam(param, null);
        },

        /**
         * 处理查询参数，模块的内部实现，不开放给其它用户调用
         * 在jquery的ajax的get调用中，将param对象中的属性转换为url查询参数，即：xxx=yyy&xxx.uuu=yyyy格式
         * jquery默认会处理成xxx=yyy&xxx[uuu]=yyy格式，不符合要求，所以重新写一个
         * @param param 参数对象
         * @param key 当前转换的属性名
         * @returns {string}
         */
        _parseParam: function (param, key) {
            var paramStr = "";
            var self = this;
            if (param === undefined || param === null) {
                return "";
            }
            if (typeof(param) === "string" || typeof(param) === "number" || typeof(param) === "boolean") {
                paramStr += "&" + encodeURIComponent(key) + "=" + encodeURIComponent(param);
            } else {
                $.each(param, function (i, v) {
                    var k = key == null ? i : key + (param instanceof Array ? "[" + i + "]" : "." + i);
                    if (v === null) {
                        return true;
                    }
                    paramStr += '&' + self._parseParam(v, k);
                });
            }
            return paramStr.length > 0 ? paramStr.substr(1) : "";
        },

        /**
         * 验证输入数据的完整性
         * 基于easyui进行form元素校验。
         * 如果form的元素具有easyui-validatebox class，将会通过easyui的validatebox进行校验，如果校验不通过，则将焦点赋予该元素，并返回false
         * @param $form jquery的form对象
         * @returns {boolean} 所有被校验的元素都通过校验后，返回true，否则返回false
         */
        validateForm : function($form){
            var $fail = null;
            $form.find(".easyui-validatebox").each(function(index , item){
                if (!$(item).validatebox("isValid")){
                    $fail = $(item);
                    return false;
                }
            });

            if ($fail !== null && $fail !== undefined){
                $fail.next().find("input:first").focus();//
                return false;
            }

            return true;
        }
    };

    return Utils;
});